#ifndef SHADEROBJECT_H
#define SHADEROBJECT_H

#include "string"
#include "vector"
#include "iostream"

/// @file ShaderObject.h
/// @brief unit shader object, keeping data about shaders read from the config file
/// @author Perseedoss Rajiv
/// @version 1.0
/// @date 29.03.11
/// Revision History :
/// Initial Version 29.03.11
/// @class ShaderObject
/// @brief a base object used to store shader info from the config file

class ShaderObject
{
public:
    /// @brief ctor
    /// @param[in] _shaderName the name of the shader
    /// @param[in] _vertexFile the filename of the vertex shader file
    /// @param[in] _fragementFile the filename of the fragment shader file
    /// @param[in] _attributes the attributes for the shader file
    /// @param[in] _attributeValues the attributes values for the shader file
    /// @param[in] _isSpecial toggle flag for special shader loading
    ShaderObject
            (
                const std::string _shaderName,
                const std::string _vertexFile,
                const std::string _fragementFile,
                const std::vector<std::string> _attributes,
                const std::vector<int> _attributeValues,
                const bool _isSpecial
            );

    /// @brief returns the name of the shader
    inline std::string getShaderName() const { return m_shaderName; }

    /// @brief returns the filename of the vertex shader file
    inline std::string getVertexFile() const { return m_vertexFile; }

    /// @brief returns the filename of the fragment shader file
    inline std::string getFragementFile() const { return m_fragementFile; }

    /// @brief returns the list of attributes for the shader
    inline std::vector<std::string> getAttributes() const { return m_attributes; }

    /// @brief returns the list of attributes values for the shader
    inline std::vector<int> getAttributeValues() const { return m_attributeValues; }

    /// @brief returns the toggle flag for special shader
    inline bool getIsSpecial() const { return m_isSpecial; }

private:
    /// @brief shader name
    std::string m_shaderName;

    /// @brief filename of the vertex shader file
    std::string m_vertexFile;

    /// @brief filename of the fragment shader file
    std::string m_fragementFile;

    /// @brief attributes of the shader
    std::vector<std::string> m_attributes;

    /// @brief attributes values of the shader
    std::vector<int> m_attributeValues;

    /// @brief whether a shader is to be loaded in a special way
    bool m_isSpecial;

};

#endif // SHADEROBJECT_H
